1 /*
2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021
3 License:   [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License].
4 Authors: Marcelo S. N. Mancini
5 
6 	Copyright Marcelo S. N. Mancini 2018 - 2021.
7 Distributed under the CC BY-4.0 License.
8    (See accompanying file LICENSE.txt or copy at
9 	https://creativecommons.org/licenses/by/4.0/
10 */
11 /* dstep -I/path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include -I/path/to/ndk-r9d/toolchains/llvm-3.4/prebuilt/linux-x86/lib/clang/3.4/include /path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include/jni.h -o jni.d*/
12 
13 module hip.jni.jni;
14 
15 version (Android):
16 import core.stdc.stdarg;
17 
18 extern (C):
19 @system:
20 nothrow:
21 @nogc:
22 
23 alias ubyte jboolean;
24 alias byte jbyte;
25 alias ushort jchar;
26 alias short jshort;
27 alias int jint;
28 alias long jlong;
29 alias float jfloat;
30 alias double jdouble;
31 alias jint jsize;
32 alias void* jobject;
33 alias jobject jclass;
34 alias jobject jstring;
35 alias jobject jarray;
36 alias jarray jobjectArray;
37 alias jarray jbooleanArray;
38 alias jarray jbyteArray;
39 alias jarray jcharArray;
40 alias jarray jshortArray;
41 alias jarray jintArray;
42 alias jarray jlongArray;
43 alias jarray jfloatArray;
44 alias jarray jdoubleArray;
45 alias jobject jthrowable;
46 alias jobject jweak;
47 alias _jfieldID* jfieldID;
48 alias _jmethodID* jmethodID;
49 alias const(JNINativeInterface)* C_JNIEnv;
50 alias const(JNINativeInterface)* JNIEnv;
51 alias const(JNIInvokeInterface)* JavaVM;
52 
53 enum jobjectRefType
54 {
55     JNIInvalidRefType = 0,
56     JNILocalRefType = 1,
57     JNIGlobalRefType = 2,
58     JNIWeakGlobalRefType = 3
59 }
60 
61 enum JNI_FALSE = 0;
62 enum JNI_TRUE = 1;
63 enum JNI_VERSION_1_1 = 0x00010001;
64 enum JNI_VERSION_1_2 = 0x00010002;
65 enum JNI_VERSION_1_4 = 0x00010004;
66 enum JNI_VERSION_1_6 = 0x00010006;
67 enum JNI_OK = 0;
68 enum JNI_ERR = -1;
69 enum JNI_EDETACHED = -2;
70 enum JNI_EVERSION = -3;
71 enum JNI_COMMIT = 1; 
72 enum JNI_ABORT = 2; 
73 
74 struct JNINativeMethod
75 {
76     const(char)* name;
77     const(char)* signature;
78     void* fnPtr;
79 }
80 
81 struct JNINativeInterface
82 {
83     void* reserved0;
84     void* reserved1;
85     void* reserved2;
86     void* reserved3;
87     jint function(JNIEnv*) GetVersion;
88     jclass function(JNIEnv*, const(char)*, jobject, const(jbyte)*, jsize) DefineClass;
89     jclass function(JNIEnv*, const(char)*) FindClass;
90     jmethodID function(JNIEnv*, jobject) FromReflectedMethod;
91     jfieldID function(JNIEnv*, jobject) FromReflectedField;
92     jobject function(JNIEnv*, jclass, jmethodID, jboolean) ToReflectedMethod;
93     jclass function(JNIEnv*, jclass) GetSuperclass;
94     jboolean function(JNIEnv*, jclass, jclass) IsAssignableFrom;
95     jobject function(JNIEnv*, jclass, jfieldID, jboolean) ToReflectedField;
96     jint function(JNIEnv*, jthrowable) Throw;
97     jint function(JNIEnv*, jclass, const(char)*) ThrowNew;
98     jthrowable function(JNIEnv*) ExceptionOccurred;
99     void function(JNIEnv*) ExceptionDescribe;
100     void function(JNIEnv*) ExceptionClear;
101     void function(JNIEnv*, const(char)*) FatalError;
102     jint function(JNIEnv*, jint) PushLocalFrame;
103     jobject function(JNIEnv*, jobject) PopLocalFrame;
104     jobject function(JNIEnv*, jobject) NewGlobalRef;
105     void function(JNIEnv*, jobject) DeleteGlobalRef;
106     void function(JNIEnv*, jobject) DeleteLocalRef;
107     jboolean function(JNIEnv*, jobject, jobject) IsSameObject;
108     jobject function(JNIEnv*, jobject) NewLocalRef;
109     jint function(JNIEnv*, jint) EnsureLocalCapacity;
110     jobject function(JNIEnv*, jclass) AllocObject;
111     jobject function(JNIEnv*, jclass, jmethodID, ...) NewObject;
112     jobject function(JNIEnv*, jclass, jmethodID, va_list) NewObjectV;
113     jobject function(JNIEnv*, jclass, jmethodID, jvalue*) NewObjectA;
114     jclass function(JNIEnv*, jobject) GetObjectClass;
115     jboolean function(JNIEnv*, jobject, jclass) IsInstanceOf;
116     jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetMethodID;
117     jobject function(JNIEnv*, jobject, jmethodID, ...) CallObjectMethod;
118     jobject function(JNIEnv*, jobject, jmethodID, va_list) CallObjectMethodV;
119     jobject function(JNIEnv*, jobject, jmethodID, jvalue*) CallObjectMethodA;
120     jboolean function(JNIEnv*, jobject, jmethodID, ...) CallBooleanMethod;
121     jboolean function(JNIEnv*, jobject, jmethodID, va_list) CallBooleanMethodV;
122     jboolean function(JNIEnv*, jobject, jmethodID, jvalue*) CallBooleanMethodA;
123     jbyte function(JNIEnv*, jobject, jmethodID, ...) CallByteMethod;
124     jbyte function(JNIEnv*, jobject, jmethodID, va_list) CallByteMethodV;
125     jbyte function(JNIEnv*, jobject, jmethodID, jvalue*) CallByteMethodA;
126     jchar function(JNIEnv*, jobject, jmethodID, ...) CallCharMethod;
127     jchar function(JNIEnv*, jobject, jmethodID, va_list) CallCharMethodV;
128     jchar function(JNIEnv*, jobject, jmethodID, jvalue*) CallCharMethodA;
129     jshort function(JNIEnv*, jobject, jmethodID, ...) CallShortMethod;
130     jshort function(JNIEnv*, jobject, jmethodID, va_list) CallShortMethodV;
131     jshort function(JNIEnv*, jobject, jmethodID, jvalue*) CallShortMethodA;
132     jint function(JNIEnv*, jobject, jmethodID, ...) CallIntMethod;
133     jint function(JNIEnv*, jobject, jmethodID, va_list) CallIntMethodV;
134     jint function(JNIEnv*, jobject, jmethodID, jvalue*) CallIntMethodA;
135     jlong function(JNIEnv*, jobject, jmethodID, ...) CallLongMethod;
136     jlong function(JNIEnv*, jobject, jmethodID, va_list) CallLongMethodV;
137     jlong function(JNIEnv*, jobject, jmethodID, jvalue*) CallLongMethodA;
138     jfloat function(JNIEnv*, jobject, jmethodID, ...) CallFloatMethod;
139     jfloat function(JNIEnv*, jobject, jmethodID, va_list) CallFloatMethodV;
140     jfloat function(JNIEnv*, jobject, jmethodID, jvalue*) CallFloatMethodA;
141     jdouble function(JNIEnv*, jobject, jmethodID, ...) CallDoubleMethod;
142     jdouble function(JNIEnv*, jobject, jmethodID, va_list) CallDoubleMethodV;
143     jdouble function(JNIEnv*, jobject, jmethodID, jvalue*) CallDoubleMethodA;
144     void function(JNIEnv*, jobject, jmethodID, ...) CallVoidMethod;
145     void function(JNIEnv*, jobject, jmethodID, va_list) CallVoidMethodV;
146     void function(JNIEnv*, jobject, jmethodID, jvalue*) CallVoidMethodA;
147     jobject function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualObjectMethod;
148     jobject function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualObjectMethodV;
149     jobject function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualObjectMethodA;
150     jboolean function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualBooleanMethod;
151     jboolean function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualBooleanMethodV;
152     jboolean function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualBooleanMethodA;
153     jbyte function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualByteMethod;
154     jbyte function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualByteMethodV;
155     jbyte function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualByteMethodA;
156     jchar function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualCharMethod;
157     jchar function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualCharMethodV;
158     jchar function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualCharMethodA;
159     jshort function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualShortMethod;
160     jshort function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualShortMethodV;
161     jshort function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualShortMethodA;
162     jint function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualIntMethod;
163     jint function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualIntMethodV;
164     jint function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualIntMethodA;
165     jlong function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualLongMethod;
166     jlong function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualLongMethodV;
167     jlong function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualLongMethodA;
168     jfloat function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualFloatMethod;
169     jfloat function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualFloatMethodV;
170     jfloat function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualFloatMethodA;
171     jdouble function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualDoubleMethod;
172     jdouble function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualDoubleMethodV;
173     jdouble function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualDoubleMethodA;
174     void function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualVoidMethod;
175     void function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualVoidMethodV;
176     void function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualVoidMethodA;
177     jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetFieldID;
178     jobject function(JNIEnv*, jobject, jfieldID) GetObjectField;
179     jboolean function(JNIEnv*, jobject, jfieldID) GetBooleanField;
180     jbyte function(JNIEnv*, jobject, jfieldID) GetByteField;
181     jchar function(JNIEnv*, jobject, jfieldID) GetCharField;
182     jshort function(JNIEnv*, jobject, jfieldID) GetShortField;
183     jint function(JNIEnv*, jobject, jfieldID) GetIntField;
184     jlong function(JNIEnv*, jobject, jfieldID) GetLongField;
185     jfloat function(JNIEnv*, jobject, jfieldID) GetFloatField;
186     jdouble function(JNIEnv*, jobject, jfieldID) GetDoubleField;
187     void function(JNIEnv*, jobject, jfieldID, jobject) SetObjectField;
188     void function(JNIEnv*, jobject, jfieldID, jboolean) SetBooleanField;
189     void function(JNIEnv*, jobject, jfieldID, jbyte) SetByteField;
190     void function(JNIEnv*, jobject, jfieldID, jchar) SetCharField;
191     void function(JNIEnv*, jobject, jfieldID, jshort) SetShortField;
192     void function(JNIEnv*, jobject, jfieldID, jint) SetIntField;
193     void function(JNIEnv*, jobject, jfieldID, jlong) SetLongField;
194     void function(JNIEnv*, jobject, jfieldID, jfloat) SetFloatField;
195     void function(JNIEnv*, jobject, jfieldID, jdouble) SetDoubleField;
196     jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticMethodID;
197     jobject function(JNIEnv*, jclass, jmethodID, ...) CallStaticObjectMethod;
198     jobject function(JNIEnv*, jclass, jmethodID, va_list) CallStaticObjectMethodV;
199     jobject function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticObjectMethodA;
200     jboolean function(JNIEnv*, jclass, jmethodID, ...) CallStaticBooleanMethod;
201     jboolean function(JNIEnv*, jclass, jmethodID, va_list) CallStaticBooleanMethodV;
202     jboolean function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticBooleanMethodA;
203     jbyte function(JNIEnv*, jclass, jmethodID, ...) CallStaticByteMethod;
204     jbyte function(JNIEnv*, jclass, jmethodID, va_list) CallStaticByteMethodV;
205     jbyte function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticByteMethodA;
206     jchar function(JNIEnv*, jclass, jmethodID, ...) CallStaticCharMethod;
207     jchar function(JNIEnv*, jclass, jmethodID, va_list) CallStaticCharMethodV;
208     jchar function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticCharMethodA;
209     jshort function(JNIEnv*, jclass, jmethodID, ...) CallStaticShortMethod;
210     jshort function(JNIEnv*, jclass, jmethodID, va_list) CallStaticShortMethodV;
211     jshort function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticShortMethodA;
212     jint function(JNIEnv*, jclass, jmethodID, ...) CallStaticIntMethod;
213     jint function(JNIEnv*, jclass, jmethodID, va_list) CallStaticIntMethodV;
214     jint function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticIntMethodA;
215     jlong function(JNIEnv*, jclass, jmethodID, ...) CallStaticLongMethod;
216     jlong function(JNIEnv*, jclass, jmethodID, va_list) CallStaticLongMethodV;
217     jlong function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticLongMethodA;
218     jfloat function(JNIEnv*, jclass, jmethodID, ...) CallStaticFloatMethod;
219     jfloat function(JNIEnv*, jclass, jmethodID, va_list) CallStaticFloatMethodV;
220     jfloat function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticFloatMethodA;
221     jdouble function(JNIEnv*, jclass, jmethodID, ...) CallStaticDoubleMethod;
222     jdouble function(JNIEnv*, jclass, jmethodID, va_list) CallStaticDoubleMethodV;
223     jdouble function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticDoubleMethodA;
224     void function(JNIEnv*, jclass, jmethodID, ...) CallStaticVoidMethod;
225     void function(JNIEnv*, jclass, jmethodID, va_list) CallStaticVoidMethodV;
226     void function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticVoidMethodA;
227     jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticFieldID;
228     jobject function(JNIEnv*, jclass, jfieldID) GetStaticObjectField;
229     jboolean function(JNIEnv*, jclass, jfieldID) GetStaticBooleanField;
230     jbyte function(JNIEnv*, jclass, jfieldID) GetStaticByteField;
231     jchar function(JNIEnv*, jclass, jfieldID) GetStaticCharField;
232     jshort function(JNIEnv*, jclass, jfieldID) GetStaticShortField;
233     jint function(JNIEnv*, jclass, jfieldID) GetStaticIntField;
234     jlong function(JNIEnv*, jclass, jfieldID) GetStaticLongField;
235     jfloat function(JNIEnv*, jclass, jfieldID) GetStaticFloatField;
236     jdouble function(JNIEnv*, jclass, jfieldID) GetStaticDoubleField;
237     void function(JNIEnv*, jclass, jfieldID, jobject) SetStaticObjectField;
238     void function(JNIEnv*, jclass, jfieldID, jboolean) SetStaticBooleanField;
239     void function(JNIEnv*, jclass, jfieldID, jbyte) SetStaticByteField;
240     void function(JNIEnv*, jclass, jfieldID, jchar) SetStaticCharField;
241     void function(JNIEnv*, jclass, jfieldID, jshort) SetStaticShortField;
242     void function(JNIEnv*, jclass, jfieldID, jint) SetStaticIntField;
243     void function(JNIEnv*, jclass, jfieldID, jlong) SetStaticLongField;
244     void function(JNIEnv*, jclass, jfieldID, jfloat) SetStaticFloatField;
245     void function(JNIEnv*, jclass, jfieldID, jdouble) SetStaticDoubleField;
246     jstring function(JNIEnv*, const(jchar)*, jsize) NewString;
247     jsize function(JNIEnv*, jstring) GetStringLength;
248     const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringChars;
249     void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringChars;
250     jstring function(JNIEnv*, const(char)*) NewStringUTF;
251     jsize function(JNIEnv*, jstring) GetStringUTFLength;
252     const(char)* function(JNIEnv*, jstring, jboolean*) GetStringUTFChars;
253     void function(JNIEnv*, jstring, const(char)*) ReleaseStringUTFChars;
254     jsize function(JNIEnv*, jarray) GetArrayLength;
255     jobjectArray function(JNIEnv*, jsize, jclass, jobject) NewObjectArray;
256     jobject function(JNIEnv*, jobjectArray, jsize) GetObjectArrayElement;
257     void function(JNIEnv*, jobjectArray, jsize, jobject) SetObjectArrayElement;
258     jbooleanArray function(JNIEnv*, jsize) NewBooleanArray;
259     jbyteArray function(JNIEnv*, jsize) NewByteArray;
260     jcharArray function(JNIEnv*, jsize) NewCharArray;
261     jshortArray function(JNIEnv*, jsize) NewShortArray;
262     jintArray function(JNIEnv*, jsize) NewIntArray;
263     jlongArray function(JNIEnv*, jsize) NewLongArray;
264     jfloatArray function(JNIEnv*, jsize) NewFloatArray;
265     jdoubleArray function(JNIEnv*, jsize) NewDoubleArray;
266     jboolean* function(JNIEnv*, jbooleanArray, jboolean*) GetBooleanArrayElements;
267     jbyte* function(JNIEnv*, jbyteArray, jboolean*) GetByteArrayElements;
268     jchar* function(JNIEnv*, jcharArray, jboolean*) GetCharArrayElements;
269     jshort* function(JNIEnv*, jshortArray, jboolean*) GetShortArrayElements;
270     jint* function(JNIEnv*, jintArray, jboolean*) GetIntArrayElements;
271     jlong* function(JNIEnv*, jlongArray, jboolean*) GetLongArrayElements;
272     jfloat* function(JNIEnv*, jfloatArray, jboolean*) GetFloatArrayElements;
273     jdouble* function(JNIEnv*, jdoubleArray, jboolean*) GetDoubleArrayElements;
274     void function(JNIEnv*, jbooleanArray, jboolean*, jint) ReleaseBooleanArrayElements;
275     void function(JNIEnv*, jbyteArray, jbyte*, jint) ReleaseByteArrayElements;
276     void function(JNIEnv*, jcharArray, jchar*, jint) ReleaseCharArrayElements;
277     void function(JNIEnv*, jshortArray, jshort*, jint) ReleaseShortArrayElements;
278     void function(JNIEnv*, jintArray, jint*, jint) ReleaseIntArrayElements;
279     void function(JNIEnv*, jlongArray, jlong*, jint) ReleaseLongArrayElements;
280     void function(JNIEnv*, jfloatArray, jfloat*, jint) ReleaseFloatArrayElements;
281     void function(JNIEnv*, jdoubleArray, jdouble*, jint) ReleaseDoubleArrayElements;
282     void function(JNIEnv*, jbooleanArray, jsize, jsize, jboolean*) GetBooleanArrayRegion;
283     void function(JNIEnv*, jbyteArray, jsize, jsize, jbyte*) GetByteArrayRegion;
284     void function(JNIEnv*, jcharArray, jsize, jsize, jchar*) GetCharArrayRegion;
285     void function(JNIEnv*, jshortArray, jsize, jsize, jshort*) GetShortArrayRegion;
286     void function(JNIEnv*, jintArray, jsize, jsize, jint*) GetIntArrayRegion;
287     void function(JNIEnv*, jlongArray, jsize, jsize, jlong*) GetLongArrayRegion;
288     void function(JNIEnv*, jfloatArray, jsize, jsize, jfloat*) GetFloatArrayRegion;
289     void function(JNIEnv*, jdoubleArray, jsize, jsize, jdouble*) GetDoubleArrayRegion;
290     void function(JNIEnv*, jbooleanArray, jsize, jsize, const(jboolean)*) SetBooleanArrayRegion;
291     void function(JNIEnv*, jbyteArray, jsize, jsize, const(jbyte)*) SetByteArrayRegion;
292     void function(JNIEnv*, jcharArray, jsize, jsize, const(jchar)*) SetCharArrayRegion;
293     void function(JNIEnv*, jshortArray, jsize, jsize, const(jshort)*) SetShortArrayRegion;
294     void function(JNIEnv*, jintArray, jsize, jsize, const(jint)*) SetIntArrayRegion;
295     void function(JNIEnv*, jlongArray, jsize, jsize, const(jlong)*) SetLongArrayRegion;
296     void function(JNIEnv*, jfloatArray, jsize, jsize, const(jfloat)*) SetFloatArrayRegion;
297     void function(JNIEnv*, jdoubleArray, jsize, jsize, const(jdouble)*) SetDoubleArrayRegion;
298     jint function(JNIEnv*, jclass, const(JNINativeMethod)*, jint) RegisterNatives;
299     jint function(JNIEnv*, jclass) UnregisterNatives;
300     jint function(JNIEnv*, jobject) MonitorEnter;
301     jint function(JNIEnv*, jobject) MonitorExit;
302     jint function(JNIEnv*, JavaVM**) GetJavaVM;
303     void function(JNIEnv*, jstring, jsize, jsize, jchar*) GetStringRegion;
304     void function(JNIEnv*, jstring, jsize, jsize, char*) GetStringUTFRegion;
305     void* function(JNIEnv*, jarray, jboolean*) GetPrimitiveArrayCritical;
306     void function(JNIEnv*, jarray, void*, jint) ReleasePrimitiveArrayCritical;
307     const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringCritical;
308     void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringCritical;
309     jweak function(JNIEnv*, jobject) NewWeakGlobalRef;
310     void function(JNIEnv*, jweak) DeleteWeakGlobalRef;
311     jboolean function(JNIEnv*) ExceptionCheck;
312     jobject function(JNIEnv*, void*, jlong) NewDirectByteBuffer;
313     void* function(JNIEnv*, jobject) GetDirectBufferAddress;
314     jlong function(JNIEnv*, jobject) GetDirectBufferCapacity;
315     jobjectRefType function(JNIEnv*, jobject) GetObjectRefType;
316 }
317 
318 struct _JNIEnv
319 {
320     const(JNINativeInterface)* functions;
321 }
322 
323 struct JNIInvokeInterface
324 {
325     void* reserved0;
326     void* reserved1;
327     void* reserved2;
328     jint function(JavaVM*) DestroyJavaVM;
329     jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThread;
330     jint function(JavaVM*) DetachCurrentThread;
331     jint function(JavaVM*, void**, jint) GetEnv;
332     jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThreadAsDaemon;
333 }
334 
335 struct _JavaVM
336 {
337     const(JNIInvokeInterface)* functions;
338 }
339 
340 struct JavaVMAttachArgs
341 {
342     jint version_;
343     const(char)* name;
344     jobject group;
345 }
346 
347 struct JavaVMOption
348 {
349     const(char)* optionString;
350     void* extraInfo;
351 }
352 
353 struct JavaVMInitArgs
354 {
355     jint version_;
356     jint nOptions;
357     JavaVMOption* options;
358     jboolean ignoreUnrecognized;
359 }
360 
361 struct _jfieldID;
362 struct _jmethodID;
363 
364 union jvalue
365 {
366     jboolean z;
367     jbyte b;
368     jchar c;
369     jshort s;
370     jint i;
371     jlong j;
372     jfloat f;
373     jdouble d;
374     jobject l;
375 }
376 
377 jint JNI_OnLoad(JavaVM* vm, void* reserved);
378 void JNI_OnUnload(JavaVM* vm, void* reserved);